home *** CD-ROM | disk | FTP | other *** search
- code segment
-
- assume cs:code,ds:code,es:code,ss:code
- org 0
-
- befehl equ 2
- status equ 3
- end_adr equ 14
-
- file_befehle equ 20
-
- cmd equ 16384
- arg1 equ cmd+0
- arg2 equ cmd+2
- arg3 equ cmd+4
- arg4 equ cmd+6
- arg5 equ cmd+8
- arg6 equ cmd+10
- arg7 equ cmd+12
- arg8 equ cmd+14
-
- buf_seg equ 22 ; DualPortedRAM->BufferRAM.PCSegment
-
- reg_bp equ 22
- reg_sp equ 20
- reg_ss equ 18
- reg_cs equ 16
- reg_es equ 14
- reg_di equ 12
- reg_ds equ 10
- reg_si equ 8
- reg_dx equ 6
- reg_cx equ 4
- reg_bx equ 2
- reg_ax equ 0
-
-
- erst_b equ this byte
-
- filetreiber:
- dw -1,-1 ; DOS-Intern
- db 0,80h ; Flags
- soffset dw offset strat ; Strategie-Routine
- ioffset dw offset intr ; Interrupt-Routine
- db "$FILE000" ; File-Kennung
-
-
- janus_seg dw (?)
- janus_ofs dw (?)
- db_ptr dw (?),(?)
-
- cmd_tab:
- dw offset amiga ; #00
- dw offset amiga ; #01
- dw offset amiga ; #02
- dw offset amiga ; #03
- dw offset copy_to_janus ; #04
- dw offset copy_to_pc ; #05
- dw offset get_adr ; #06
- dw offset amiga ; #07
- dw offset fill ; #08
- dw offset amiga ; #09
- dw offset amiga ; #10
- dw offset amiga ; #11
- dw offset amiga ; #12
- dw offset amiga ; #13
- dw offset amiga ; #14
- dw offset amiga ; #15
- dw offset amiga ; #16
- dw offset amiga ; #17
- dw offset amiga ; #18
- dw offset amiga ; #19
-
- dummy proc far
- ret
- dummy endp
-
- ; ************ Interrupt fr Vektor $49
- fileint proc far
- push bp
- push sp
- push ss
- push cs
- push es
- push di
- push ds
- push si
- push dx
- push cx
- push bx
- push ax
-
- mov bp,sp
- push cs
- pop ds
- mov di,cs:janus_ofs
- mov es,cs:janus_seg
-
- cmp ah,file_befehle
- jge fehler
-
- push ax
- mov al,ah
- shl al,1
- xor ah,ah
- mov si,ax
- pop ax
- call [cmd_tab+si]
- jmp okay
-
- fehler:
- mov w[bp+reg_bx],7500
-
- okay:
- pop ax
- pop bx
- pop cx
- pop dx
- pop si
- pop ds
- pop di
- pop es
- pop bp
- pop bp
- pop bp
- pop bp
- iret
- fileint endp
-
-
- call_and_wait proc near
- mov ah,7
- mov al,26
- int 0b
- mov ah,8
- mov al,26
- int 0b
- ret
- call_and_wait endp
-
-
- copy_to_janus proc near
- mov ds,bx
- mov si,dx
- rep movsb
- ret
- copy_to_janus endp
-
-
- copy_to_pc proc near
- push ds
- mov ds,cs:janus_seg
- mov si,cs:janus_ofs
- mov es,bx
- mov di,dx
- rep movsb
- pop ds
- ret
- copy_to_pc endp
-
-
- fill proc near
- mov es,bx
- mov di,dx
- fill_loop:
- mov es:b[di],al
- add di,1
- loop fill_loop
- ret
- fill endp
-
-
- get_adr proc near
- mov w[bp+reg_es],cs:janus_seg
- mov w[bp+reg_di],cs:janus_ofs
- ret
- get_adr endp
-
-
- amiga proc near
- mov al,ah
- xor ah,ah
- mov es:w[di+arg1],ax
- mov es:w[di+arg2],bx
- mov es:w[di+arg3],cx
- mov es:w[di+arg4],dx
- call near call_and_wait
- mov w[bp+reg_bx],es:w[di+arg2]
- mov w[bp+reg_cx],es:w[di+arg3]
- mov w[bp+reg_dx],es:w[di+arg4]
- ret
- amiga endp
-
-
- ; ************ Ende des Treibers ***********
- ende equ this byte
-
-
- ; ************ Interruptroutine des Treibers
- intr proc far
- push ax
- push bx
- push cx
- push dx
- push di
- push si
- push bp
- push ds
- push es
- pushf
-
- push cs
- pop ds
-
- les di,dword ptr db_ptr
- mov bl,es:[di+befehl]
- cmp bl,0
- je bc_okay
-
- mov ax,8003h
- jmp short intr_end
-
- bc_okay:
- call init
-
- intr_end label near
- or ax,0100h
- mov es:[di+status],ax
-
- popf
- pop es
- pop ds
- pop bp
- pop si
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- intr endp
-
-
- strat proc far
- mov cs:db_ptr,bx
- mov cs:db_ptr+2,es
- ret
- start endp
-
-
- ; ************ Installationsroutine
- init proc near
- mov word ptr es:[di+end_adr],offset ende
- mov word ptr es:[di+end_adr+2],cs
-
- mov dx,offset initm ; Installationsmeldung ausgeben
- mov ah,9
- int 21h
-
- push di ; Verbindung zum Amiga herstellen
- push es
- push ds
- mov ah,1
- mov al,26
- int 0b
- cmp di,-1
- je init_fehler
- mov janus_ofs,di
- mov janus_seg,es:w[buf_seg]
- mov es,es:w[buf_seg]
- mov es:w[di+arg1],1000
- call near call_and_wait
- pop ds
- pop es
- pop di
-
- mov ah,25h ; File-Interrupt einbinden
- mov al,049
- mov dx,offset fileint
- int 21h
-
- mov ioffset,offset dummy
- mov soffset,offset dummy
-
- mov dx,offset sokay ; Treiber erfolgreich installiert
- mov ah,9
- int 21h
-
- xor ax,ax
- init_ende:
- ret
-
- init_fehler:
- pop ds
- pop es
- pop di
- mov dx,offset kserv
- mov ah,9
- int 21h
- mov ax,1
- mov word ptr es:[di+end_adr],offset filetreiber
- mov word ptr es:[di+end_adr+2],cs
- jmp near init_ende
- init endp
-
-
- texte equ 12
- text_tab:
- dw offset exe_t
- dw offset info1
- dw offset info2
- dw offset info3
- dw offset info4
- dw offset info5
- dw offset info6
- dw offset info7
- dw offset info8
- dw offset info9
- dw offset info10
- dw offset info11
- dw offset info12
-
- exe_start proc far
- push cs
- pop ds
-
- mov bx,0
- ausgabe:
- push bx
- shl bx,1
- mov dx,[text_tab+bx]
- mov ah,9
- int 21h
- xor ax,ax
- int 16h
- pop bx
- add bx,1
- cmp bx,texte
- jle ausgabe
-
- mov ax,4c00
- int 21h
- exe_start endp
-
- ; ************ Installationsmeldungen beim Start
- initm db "ATUtilities File Transfer - Version 2.0 17. September 1993",13,10
- db "Copyright (C) 1993 by Thomas Dreibholz. All rights reserved.",13,10,"$"
- sokay db "Treiber wurde erfolgreich installiert.",13,10,10,"$"
- kserv db "Amiga-Treiber an Janus-Interrupt 26 ist nicht aktiv.",13,10
- db "Treiber konnte nicht installiert werden.",13,10,10,"$"
-
- exe_t db "ATUtilities File Transfer:",13,10
- db "Dieses Programm ist ein Treiber und kann deshalb nicht direkt aufgerufen",13,10
- db "werden. Um den Treiber zu Installieren, muá folgende Zeile in die CONFIG.SYS",13,10
- db "eingefgt werden:",13,10,10
- db "DEVICE=Lw:\Verz\FILE.EXE",13,10,10
- db "Nach dem nchsten Reset stehen dann die Funktionen zur Verfgung.",13,10,10,10
- db "File Transfer ermglicht es, von einem Programm auf der AT-Karte Dateien",13,10
- db "und Verzeichnisse auf dem Amiga zu bearbeiten. Zum Aufruf der Funktionen",13,10
- db "wird das Programm auf Interrupt-Verktor 49h installiert und kann somit von",13,10
- db "allen Sprachen aufgerufen werden, die direkte Interruptprogrammierung unter-",13,10
- db "sttzen.",13,10,10
- db "Datei- und Verzeichnisnamen sowie Daten werden dem Interrupt im Parameter-",13,10
- db "speicher des Janus-Interrupt 26 (der Interrupt zur Kommunikation mit dem Amiga)",13,10
- db "bergeben. Die Adresse dieses Speichers kann mit der Funktion 6 ermittelt",13,10
- db "werden.",13,10,10
- db "17. 09. 1993 - Version 2.0 Copyright (C) 1993 by Thomas Dreibholz",13,10,10
- db "<< Taste >>",13,10,"$"
- info1 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 1",13,10,10
- db "ffnen einer Amiga-Datei (Open):",13,10
- db " AH = 0",13,10
- db " BX = Zugriffsmodus",13,10
- db " 1 = Lesen",13,10
- db " 2 = Schreiben",13,10
- db " 3 = Lesen und Schreiben",13,10
- db " Name der Datei im Parameter-Speicher des Janus-Interrupt 26",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10
- db " CX = Handle-Nummer",13,10,10,10
- db "Datei schlieáen (Close):",13,10
- db " AH = 1",13,10
- db " BX = Handlenummer",13,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
- info2 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 2",13,10,10
- db "Aus Datei lesen (Read):",13,10
- db " AH = 2",13,10
- db " BX = Handlenummer",13,10
- db " CX = Anzahl der zu lesenden Bytes",13,10,10
- db " Daten im Parameter-Speicher des Janus-Interrupt 26",13,10
- db " BX = Anzahl der gelesenen Bytes",13,10,10,10
- db "In Datei schreiben (Write):",13,10
- db " AH = 3",13,10
- db " BX = Handlenummer",13,10
- db " CX = Lnge des Datenblocks",13,10
- db " Daten im Parameter-Speicher des Janus-Interrupt 26",13,10,10
- db " BX = Anzahl der geschriebenen Bytes",13,10,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
- info3 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 3",13,10,10
- db "PC-Speicher in Janus-Speicher kopieren:",13,10
- db " AH = 4",13,10
- db " BX = Segment",13,10
- db " DX = Offset",13,10
- db " CX = Lnge",13,10,10,10
- db "Janus-Speicher in PC-Speicher kopieren:",13,10
- db " AH = 5",13,10
- db " BX = Segment",13,10
- db " DX = Offset",13,10
- db " CX = Lnge",13,10,10,10
- db "Adresse des Parameter-Speicher von Janus-Interrupt 26 ermitteln",13,10
- db " AH = 6",13,10,10
- db " ES = Segment",13,10
- db " DI = Offset",13,10,10,10
- db "<< Taste >>",13,10,"$"
- info4 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 4",13,10,10
- db "Position in Datei ndern (Seek):",13,10
- db " AH = 7",13,10
- db " BX = Handlenummer",13,10
- db " CX = Position",13,10
- db " DX = Positionsmodus",13,10
- db " 0 = CX Bytes vom Anfang der Datei",13,10
- db " 1 = CX Bytes von der aktuellen Position",13,10
- db " 2 = CX Bytes vom Ende der Datei",13,10,10
- db " BX = Seek() ausgefhrt",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Ungltiger Handle",13,10
- db " Rckgabewert von Seek() als DWORD im Parameter-Speicher von",13,10
- db " Janus-Interrupt 26",13,10,10,10,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
- info5 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 5",13,10,10
- db "Speicherbereich mit Zeichen fllen:",13,10
- db " AH = 8",13,10
- db " AL = Fllzeichen",13,10
- db " BX = Segment",13,10
- db " DX = Offset",13,10
- db " CX = Lnge",13,10,10,10
- db "Datei lschen (DeleteFile):",13,10
- db " AH = 9",13,10
- db " Name der Datei im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = DeleteFile() ausgefhrt",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10,10,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
- info6 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 6",13,10,10
- db "AmigaDOS-Fehlernummer ermitteln (IoErr):",13,10
- db " AH = 10",13,10,10
- db " BX = Fehlernummer",13,10,
- db " 202 = Objekt wird gerade benutzt",13,10
- db " 203 = Objekt existiert bereits",13,10
- db " 204 = Verzeichnis nicht gefunden",13,10
- db " 205 = Objekt nicht gefunden",13,10
- db " 210 = Dateiname ist ungltig (zu lang oder mit unerlaubten Zeichen)",13,10
- db " 213 = Diskette/Festplatte ist im Validating-Zustand",13,10
- db " 214 = Diskette ist schreibgeschtzt",13,10
- db " 215 = Rename nur innerhalb einer Diskette/Festplatte mglich",13,10
- db " 216 = Verzeichnis ist nicht leer",13,10
- db " 219 = Seek()-Fehler: Ungltige Parameter",13,10
- db " 221 = Diskette/Festplatte ist voll",13,10
- db " 222 = Datei ist gegen Lschen geschtzt",13,10
- db " 223 = Datei ist gegen berschreiben geschtzt",13,10
- db " 224 = Datei ist gegen Lesen geschtuzt",13,10
- db " 226 = Keine Diskette eingelegt",13,10,10,10
- db "<< Taste >>",13,10,"$"
- info7 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 7",13,10,10
- db "Verzeichnis laden",13,10
- db " AH = 11",13,10
- db " Verzeichnisname im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10
- db " CX = Anzahl der Eintrge im Parameterspeicher",13,10,10
- db "Aufbau der Eintragstabelle:",13,10
- db " Offset 0: Dateiname (30 Zeichen)",13,10
- db " Offset 30: Lnge der Datei als DWORD",13,10
- db " Offset 34: Protection-Bits als WORD",13,10
- db " Offset 36: Eintragstyp als BYTE",13,10
- db " 1 = Datei, sonst Verzeichnis",13,10
- db " Offset 37: Erstellungsstunde als BYTE",13,10
- db " Offset 38: Erstellungsminute als BYTE",13,10
- db " Offset 39: Erstellungssekunde als BYTE",13,10
- db " Offset 40: Erstellungstag als BYTE",13,10
- db " Offset 41: Erstellungsmonat als BYTE",13,10
- db " Offset 42: Erstellungsjahr als WORD",13,10,10
- db "<< Taste >>$"
- info8 db 13,10
- db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 8",13,10,10
- db "Jeder Eintrag besitzt 44 Bytes. Der erste Eintrag enthlt die Daten des",13,10
- db "geladenen Verzeichnisses, die folgenden Eintrge die Daten der Dateien.",13,10
- db "Es sind maximal 372 Eintrge vorhanden. Sollte das Verzeichnis mehr Dateien",13,10
- db "besitzen, als Eintrge vorhanden sind, so wird das Einlesen beim 372.",13,10
- db "Eintrag beendet.",13,10,10,10
- db "Lock auf Datei oder Verzeichnis (Lock):",13,10
- db " AH = 12",13,10
- db " Name des Objekts im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = Lock() ausgefhrt",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10
- db " CX = Handlenummer des Lock",13,10,10
- db "Lock zurckgeben (UnLock):",13,10
- db " AH = 13",13,10
- db " BX = Handlenummer des Lock",13,10,10,10
- db "<< Taste >>",13,10,"$"
- info9 db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 9",13,10,10
- db "Name mit Laufwerk und allen Unterverzeichnissen fr Lock ermitteln:",13,10
- db " AH = 14",13,10
- db " BX = Handlenummer des Lock",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10
- db " Name im Parameterspeicher von Janus-Interrupt 26",13,10,10,10
- db "Informationen ber das Laufwerk, auf das sich ein Lock bezieht, ermitteln:",13,10
- db " AH = 15",13,10
- db " BX = Handlenummer des Lock",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10
- db " Tabelle mit Informationen im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " Beschreibung der Tabelle auf der folgenden Seite.",13,10,10
- db "<< Taste >>",13,10,"$"
- info10:
- db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 10",13,10,10
- db "Aufbau der Tabelle:",13,10
- db " Offset 0: Anzahl der Soft Errors als DWORD (id_NumSoftErrors)",13,10
- db " Offset 4: Nummer des Units als DWORD (id_UnitNumber)",13,10
- db " Offset 8: Laufwerksstatus als DWORD (id_DiskState)",13,10
- db " 80 = Diskette ist schreibgeschtzt",13,10
- db " 81 = Diskette/Festplatte wird repariert (Validating)",13,10
- db " 82 = Diskette/Festplatte ist okay und beschreibbar",13,10
- db " Offset 12: Gesamtzahl der Blcke als DWORD (id_NumBlocks)",13,10
- db " Offset 16: Anzahl der belegten Blcke als DWORD (id_NumBlocksUsed)",13,10
- db " Offset 20: Bytes pro Block als DWORD (id_BytesPerBlock)",13,10
- db " Offset 24: Laufwerksaktivierung als DWORD (id_InUse)",13,10
- db " <> 0 = Laufwerk aktiv",13,10,10,10
- db "Aktuelles Verzeichnis setzen (CurrentDir):",13,10
- db " AH = 16",13,10
- db " Verzeichnisname im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10,10
- db "<< Taste >>$"
- info11:
- db 13,10
- db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 11",13,10,10
- db "Unterverzeichnis erstellen (CreateDir):",13,10
- db " AH = 17",13,10
- db " Name der Verzeichnisses im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = CreateDir() ausgefhrt",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10,10,10
- db "Datei umbenennen (Rename):",13,10
- db " AH = 18",13,10
- db " Alter Dateiname im Parameterspeicher ab Offset 0",13,10
- db " Neuer Dateiname im Parameterspeicher ab Offset 1000",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
- info12:
- db "Beschreibung des File Transfer-Interrupts auf Vektor 49h: - Seite 12",13,10,10
- db "Amiga-Programm starten (Execute):",13,10
- db " AH = 19",13,10
- db " Befehl im Parameter-Speicher von Janus-Interrupt 26",13,10,10
- db " BX = Fehlernummer",13,10
- db " 10000 = Okay",13,10
- db " <> 10000 = Fehler",13,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
- db "<< Taste >>",13,10,"$"
-
- code ends
- end exe_start